package com.soft.javase.ch02.test03;

/**
 * @author wangzhisen
 * @Desc TODO
 * @date 2025/4/18
 *
 * 3.写一个类Person,包含以下属性：
 *      String  name;
 *      int  age;
 *      boolean  gender;  //性别  true男  false女
 *      Person  partner;  //伴侣
 * 为Person类写一个marry(Person  p)方法，代表当前对象和p结婚，如若可以结婚，则输出恭贺信息，
 * 否则输出不能结婚原因。要求在另外一个类中写一个主方法，来测试以上程序。
 * （下列情况不能结婚：1，同性；2，未达到结婚年龄，男<24，女<22；3，某一方已婚）
 */
public class Person {
    String name;
    int age;
    boolean gender;  // true为男，false为女
    Person partner;  // 伴侣

    public Person(String name, int age, boolean gender) {
        this.name = name;
        this.age = age;
        this.gender = gender;
        this.partner = null;
    }

    public void marry(Person p) {
        // 检查是否同性
        if (this.gender == p.gender) {
            System.out.println(this.name + "和" + p.name + "不能结婚：同性不能结婚");
            return;
        }

        // 检查男方年龄是否达到24岁
        if (this.gender && this.age < 24) {
            System.out.println(this.name + "不能结婚：男方年龄未满24岁");
            return;
        }
        if (p.gender && p.age < 24) {
            System.out.println(p.name + "不能结婚：男方年龄未满24岁");
            return;
        }

        // 检查女方年龄是否达到22岁
        if (!this.gender && this.age < 22) {
            System.out.println(this.name + "不能结婚：女方年龄未满22岁");
            return;
        }
        if (!p.gender && p.age < 22) {
            System.out.println(p.name + "不能结婚：女方年龄未满22岁");
            return;
        }

        // 检查是否已婚
        if (this.partner != null) {
            System.out.println(this.name + "和"+p.name+"不能结婚：有人已经已婚");
            return;
        }
        if (p.partner != null) {
            System.out.println(this.name + "和"+p.name+"不能结婚：有人已经已婚");
            return;
        }

        // 可以结婚
        this.partner = p;
        p.partner = this;
        System.out.println("恭喜" + this.name + "和" + p.name + "结婚啦！");
    }
}

